/*
*哈夫曼编码-链式结构
*
*功能实现:
* 源文件字符权值确认操作
* 哈夫曼树的建立操作
* 字符字典的建立操作
* 源文件转码操作操作
* 二进制文件译码操作
* 文件输出操作
* 内存清理操作
*/
#include <stdio.h>
#include <stdlib.h>
#define _HFMAlgorithm_
#define codesize 30
//哈夫曼树结点定义
typedef struct forest{
struct forest *left;
struct forest *right;
struct forest *parent;
unsigned int weight;
char word;
}HFMNode;
//字符字典结点定义
typedef struct hfmtable{
char word;
char code[codesize];
int start;//标记起始位置
struct hfmtable *next;
}Table;
//函数声明
HFMNode * ReadFile(void);
HFMNode * CreateHFMTree(HFMNode *F);
void HFMCode(HFMNode * root,Table * &table);
void PrintHFMTree(HFMNode *root);
void PrintTable(Table *t);
void TransCoding(Table * table);
void ReTransCoding(HFMNode * root);
void SelectFile(void);
void PrintFileInformation(char FileName[]);
void DestroyHFMTree(HFMNode *root);
void DestroyTable(Table *table);
//读取源文件,确认各字符权值建立森林
HFMNode * ReadFile(void)
{
HFMNode *head,*p;
FILE *fp = NULL;
char a;
//创建表头结点
head = (HFMNode *)malloc(sizeof(HFMNode));
head->left = head->right = head->parent = NULL;
head->word = '\0';
head->weight = 0;
//读取源文件,确认权重
fp = fopen("input.data","r");
while( (a = fgetc(fp)) != EOF ){
for(p = head;p->parent && p->pare
哈夫曼树-贪心算法的应用实例
最新推荐文章于 2024-03-31 22:01:41 发布
本文通过C++实现哈夫曼编码,包括读取文件确认字符权值、构建哈夫曼树、生成哈夫曼字典、文件转码和译码操作。详细介绍了哈夫曼编码的链式结构和贪心算法在其中的应用。
摘要由CSDN通过智能技术生成